package ar.edu.caece.pl.asin.model.impl;

import ar.edu.caece.pl.alex.model.IToken;
import ar.edu.caece.pl.alex.model.impl.Token;
import ar.edu.caece.pl.asin.manager.IAnalizadorSintactico;
import ar.edu.caece.pl.asin.manager.impl.AbstractAnalizadorSintactico;
import ar.edu.caece.pl.asin.model.ITokenStream;

public class TipoC1 extends AbstractAnalizadorSintactico implements IAnalizadorSintactico {

	/* INICIALIZACION */	
	public TipoC1 ( ITokenStream ts ) {
		super(ts, false);
	}
	public TipoC1 ( ITokenStream ts, boolean debugMode ) {
		super(ts,debugMode);
	}
	

	/** 
	 * Devuelve true si reconoce otra definicion de constantes
	 */
	public boolean reconocer() {

		boolean recognized = true; //(asumimos correctitud hasta demostrar lo contrario)
		
		//----------------------------------------------
		//Agrego info de debug de la produccion
		em.debug( "Reconocer TipoC1:");
		//----------------------------------------------
		
		/* <TIPO_C1> -> , IDENTIFICADOR : <TIPO_C> |
		 *              LAMBDA  					 */
		
		if ( this.getTokenSiguiente().getType() == IToken.TYPE_COMA ) {

			// , IDENTIFICADOR : <TIPO_C>
			
			//----------------------------------------------
			//Agrego info de debug de la produccion
			em.debug( ", IDENTIFICADOR : <TIPO_C>", this.getTokenSiguiente() );
			//----------------------------------------------

			// Reconocer Coma
			if ( !this.reconocerToken(IToken.TYPE_COMA) ) {
				//El reconocerToken() habria adelantado el tokenStream hasta salir de esta iteracion de TipoC1,
				//entonces no hay que seguir buscando sino salir
				return false;
			}
			
			// Reconocer Identificador
			if ( !this.reconocerToken(IToken.TYPE_IDENTIFICADOR) ) {
				return false;
			}

			// Reconocer Dos puntos
			if ( !this.reconocerToken(IToken.TYPE_DOS_PUNTOS) ) {
				return false;
			}
			
			//LISTO: Ya queda listo en siguiente para reconocer otro TipoC en el bucle del Header
			
		}
		return recognized;
	}
	
	public static boolean primeros(IToken token) {
		return  token.equals( new Token(IToken.TYPE_COMA) );
	}
}
